
import contextlib


# Config被设计为拥有“类属性”
'''
    配置类
'''
class Config:
    enable_backprop = True
    train = True
    enable_gpu = False



# 修饰器@contextlib.contextmanager，就可以创建一个判断上下文的函数了
# 当处理进入with块的作用域时，预处理会被调用，当处理离开with块的作用域的时候，后处理会被调用
@contextlib.contextmanager
def using_config(name, value):
    old_value = getattr(Config, name)
    setattr(Config, name, value)
    try:
        yield
    finally:
        setattr(Config, name, old_value)

# 不计算梯度
def no_grad():
    return using_config('enable_backprop', False)


# 测试模型
def test_mode():
    return using_config('train', False)

